import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.TimeUnit;

/**
 * @author Jiange
 * @create 2021-05-13-15:13
 */
public class BlockingQueueDemo {
    public static void main(String[] args) throws InterruptedException {
        //ArrayBlockingQueue 数组构成的有界数组
        //LinkedBlockingQueue  由链表结构组成的有界阻塞队列
        // SynchronousQueue 这个队列里面只能有 单个元素
        //记住这个是队列  先进先出

        BlockingQueue<String> queue = new ArrayBlockingQueue(3);
        //下面这些是会报错
//        queue.add("a");
//        queue.add("b");
//        queue.remove();
//
//        String element = queue.element();//获取队列的最后一个元素
//        System.out.println(element);

        //下面这些不会报错
//        queue.offer("a");
//        queue.offer("b");
//        System.out.println(queue.poll());

        //这些方法会阻塞
        //满了添加阻塞
        //空了取阻塞
//        queue.offer("a",3L, TimeUnit.SECONDS);  过时不候
        try {
            queue.put("a");
            queue.put("a");
            queue.put("a");
            System.out.println(queue.take());
            queue.put("a");
            System.out.println(queue.take());

        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }
}
